"use strict";
/*
    TypeScript数据类型
 */
/**
 * any 任意类型
 * 任意值是 TypeScript 针对编程时类型不明确的变量使用的一种数据类型。
 * 任意值类型可以让这些变量跳过编译阶段的类型检查。
 */
let x = 1; //数字类型
console.log(x);
x = "how are you"; //字符串类型
console.log(x);
x = false; //布尔类型
console.log(x);
//定义存储各种类型数据的数组
let arrayList = [1, false, 'fine'];
arrayList[1] = 100;
console.log(arrayList);
/**
 * number 数字类型
 * 双精度 64 位浮点值。它可以用来表示整数和分数。
 */
let binaryLiteral = 0b1010; // 二进制
let octalLiteral = 0o744; // 八进制
let decLiteral = 6; // 十进制
let hexLiteral = 0xf00d; // 十六进制
/**
 * string 字符串类型
 * 一个字符系列，使用单引号（'）或双引号（"）来表示字符串类型。反引号（`）来定义多行文本和内嵌表达式。
 */
let festival = "中秋节";
let year = 2019;
let sentence = `今天是${year}年${festival}`;
console.log(sentence); // 输出 今天是2019年中秋节
/**
 * boolean 布尔类型
 * 表示逻辑值：true 和 false。
 */
let falg = false;
/**
 * array 数组类型
 * [] 或 Array<?> 泛型
 */
let arr = [1, 2];
let arr2 = [3, 4];
/**
 * 元组
 * 元组类型用来表示已知元素数量和类型的数组，各元素的类型不必相同，对应位置的类型需要相同。
 */
let y;
y = ['Ryan', 23]; // 运行正常
// y = [23, 'Ryan'];    // 报错, idea都提示错误啦
console.log(y[0]); // 输出 Ryan
/**
 * enum 枚举
 * 枚举类型用于定义数值集合。
 */
var Color;
(function (Color) {
    Color[Color["Red"] = 0] = "Red";
    Color[Color["Green"] = 1] = "Green";
    Color[Color["Blue"] = 2] = "Blue";
})(Color || (Color = {}));
;
let c = Color.Blue;
console.log(c); // 输出 2
/**
 * void
 * 用于标识方法返回值的类型，表示该方法没有返回值。
 */
// function sayHello(): void {
//     alert("hello")
// }
// sayHello();
/**
 * null 表示对象值缺失，空对象。
 * undefined 用于初始化变量为一个未定义的值。
 */
console.log(typeof null); // null返回是object
//可以用|来支持多类型
let d;
d = 1; // 运行正确
d = null; // 运行正确
d = undefined; // 运行正确
/**
 * never
 * never 是其它类型（包括 null 和 undefined）的子类型，代表从不会出现的值。
 * 这意味着声明为 never 类型的变量只能被 never 类型所赋值，在函数中它通常表现为抛出异常或无法执行到终止点（例如无限循环）。
 */
let x1;
let y1;
// 运行错误，数字类型不能转为 never 类型
// x1 = 123;
// 运行正确，never 类型可以赋值给 never类型
x1 = (() => { throw new Error('exception'); })();
// 运行正确，never 类型可以赋值给 数字类型
y1 = (() => { throw new Error('exception'); })();
// 返回值为 never 的函数可以是抛出异常的情况
function error(message) {
    throw new Error(message);
}
// 返回值为 never 的函数可以是无法被执行到的终止点的情况
function loop() {
    while (true) { }
}
